home *** CD-ROM | disk | FTP | other *** search
-
-
-
-
- The little programers guide to the hudsonbase
- ---------------------=*=---------------------
-
-
-
-
-
- Was Sie schon immer über die
-
-
- Strukturen der Hudson-Messagebase
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
- wissen wollten -
- bisher aber nicht zu fragen wagten ...
-
-
-
-
- -------------------------------------------------------------------------------
-
-
- DIE DATEIEN
- ~~~~~~~~~~~
- Die Messagebase besteht aus fünf Dateien, in denen alle Mails aller Areas
- gespeichert werden (ausser den Mailer *.MSG's natürlich):
-
- MSGINFO .BBS MSG-Anzahl in den Boards (höchste,niedrigste,gesamt)
- MSGIDX .BBS Message Nr x gehört zu Board y
- MSGHDR .BBS Anschriftenteil der MSG's (BY:XX, TO:XX, RE:XX, Flags ..)
- MSGTXT .BBS Der eigentliche Text (ohne BY:, TO:, etc.)
- MSGTOIDX.BBS Indexdatei für TO:xxx, enthält Namen bzw. *Received*
-
-
- Die Messagebase arbeitet nicht mit den Namen der Echoboards, sondern
- organisiert sich ausschließlich mit den Board-Nummern (1 - 200). Boardnamen
- werden nur vom Tosser/Scanner verwendet - der damit die Zuordnung zu der vom
- SysOp definierten Boardnummer aufbaut (zB: REQUEST.GER = Board# 100). Die
- fünf Dateien enthalten also KEINE Boardnamen (ausser bei Fehlern :-).
-
-
-
-
- VARIABLENAUFBAU
- ~~~~~~~~~~~~~~~
- Folgende Variablenarten werden verwendet (Pascal-Strukturen):
-
- 1-Byte-Zeiger = Byte = ASCII 0 bis ASCII 255
-
- 2-Byte-Zeiger = Integer = LSB,MSB
-
- String = PASCSTRG = [LängenByte]TEXT
-
-
-
-
- DIE STRUKTUREN
- ~~~~~~~~~~~~~~
-
-
- MSGINFO.BBS
- ===========
-
- Randomdatei mit Satzlänge 2
- Satzanzahl immer 203
-
- Bedeutung: Enthält die Gesamtzahl der Messages und die Zahl in den
- einzelnen Boards. Damit kann zB. ein MSG-Editor anzeigen
- wieviele Nachrichten in einem Board liegen.
-
- Satzaufbau:
-
- InfoRecord = Record
- LowMsg: Integer;
- HighMsg: Integer;
- TotalActive: Integer;
-
- ActiveMsgs: Array[1..200] of Integer;
- End;
-
-
- Felder: Also, alles 2-Byte-Zeiger:
-
- (Low)(High)(Total)(Area1)(Area2)(Area3)(Area...200)
- 2 2 2 2 2 2 ... = 406 Byte
-
-
- Alle Zeigerwerte liegen zwischen 1 und 32768.
- Low = Niedrigste Nr aller aktiven MSG's
- High = Höchste Nr aller aktiven MSG's
- Total = Anzahl aller aktiven MSG's
- AreaX = Anzahl der aktiven MSG's in Area 1 - 200
-
- (aktiv=ungelöscht=ohne Löschvermerk)
-
-
- Hinweis: Manche Tosser verdoppeln diesen Dateiinhalt indem sie aus
- Sicherheitsgründen die Gesamtstruktur zweimal hintereinander anlegen:
-
- (Low)(High)(Total)(Area1)(Area2)(Area..200)(Low)(High)(Total)(Area1)...
- ^^^^^^^^^^^^^^^^^^^^^^^^...
- Dann ist die MSGINFO.BBS = 812 Byte groß. Gültig sind aber nur die
- ersten 406 Byte.
-
-
-
-
- MSGIDX.BBS
- ==========
-
- Randomdatei mit Satzlänge 3
- Je Message existiert ein Satz.
-
- Bedeutung: Hält für jede Message(-Nr) fest zu welchem Board sie
- gehört. Damit findet ein Editor beim Weiterschalten die
- jeweils nächste oder vorige Message in einem Board.
-
- Satzaufbau:
-
- IdxRecord = Record
- MsgNum: Integer;
- Board: Byte;
- End;
-
-
- Felder: Also 2-Byte-Zeiger plus 1-Byte-Zeiger:
-
- (MSG-Nr) (Board)
- 2 1 = 3
-
- MSG-Nr zwischen 1 und 32768
- Board zwischen 1 und 200
-
-
-
-
- MSGHDR.BBS
- ==========
-
- Randomdatei mit Satzlänge 187
- Je Message existiert ein Satz.
-
- Bedeutung: Enthält den gesamten Message-Header, incl. aller Angaben
- zu Sender, Empfänger, Nodeadressen, etc.
- Ebenso einen Zeiger auf den eigentlichen Messagetext.
-
- Satzaufbau:
- Bytes
- HdrRecord = Record
- MsgNum, Integer 2
- ReplyTo, Integer 2
- SeeAlsoNum, Integer 2
- TimesRead: Integer { Not used } 2
- StartRec: Word 4
- NumRecs, Integer 2
- DestNet, Integer 2
- DestNode, Integer 2
- OrigNet, Integer 2
- OrigNode: Integer 2
- DestZone, Byte 1
- OrigZone: Byte 1
- Cost: Integer 2
- MsgAttr, Byte 1
- NetAttr, Byte 1
- Board: Byte 1
- PostTime: String[5] 6
- PostDate: String[8] 9
- WhoTo, String[35] 36
- WhoFrom: String[35] 36
- Subj: String[72] 72
- End;
-
-
-
- Felder: Alle Strings sind in der Form "[Längenbyte]Text" aufgebaut.
-
- MsgNum - Fortlaufende Nummer 1 - 32768
-
- ReplyTo - Rück-Verweis (Verkettung zurück) auf
- Msg Nr xx oder 0
-
- SeeAlsoNum - Vor-Verweis (Verkettung vorwärts) auf
- Msg Nr xx oder 0
-
- StartRec - ist als WORD aufgebaut und enthält die
- Blocknummer bei der der Messagetext in
- der MSGTXT.BBS beginnt.
-
- NumRecs - Anzahl der Blöcke die die Message in der
- MSGTXT.BBS belegt.
-
- DestNet/
- Node/Zone - Bei Netmails Ziel-Zone, -Node und -Netz
-
- OrgNet/
- Node/Zone - Bei Netmails Origin-Zone, -Node und Netz
-
- Cost - Kostenkennung der Mail
-
- MsgAttr - Msg Attributes:
- Bit 0: Deleted
- Bit 1: Unsent net mail message
- Bit 2: Net mail message
- Bit 3: Private message
- Bit 4: Received
- Bit 5: Unsent echomail message
- Bit 6: Local message
- Bit 7: Not used
-
- NetAttr - Net Attributes:
- Bit 0: Kill after sent
- Bit 1: Sent OK
- Bit 2: File attach
- Bit 3: Crash mail
- Bit 4: Request Receipt
- Bit 5: Audit Request
- Bit 6: Is a Return Receipt
- Bit 7: Not used
-
- Dieses Byte wird nur bei Netmails verwendet.
-
-
- Board - Boardnummer, Board zu dem die Msg gehört
-
- PostTime - Uhrzeit der Msg, in der Stringform:
- 12:45 Uhr => (ASCII_5)12:45
-
- PostDate - Datum der Msg, als Monat-Tag-Jahr:
- 24.06.92 => (ASCII_8)06-24-92
-
- WhoTo - Empfängername in Stringform
-
- WhoFrom - Ansendername in Stringform
-
- Subj - Betreff in Stringform
-
-
-
-
-
- MSGTXT.BBS
- ==========
-
- Bedeutung: Enthält den Messagetext - und NUR den Text.
-
- Satzaufbau: Messagetext in 256-Byte-Blöcken:
-
- Byte 1 = Blocklänge (1 bis 255)
- Byte 2 - 256 = Text
-
-
-
- Ein Text der zB. 300 Byte lang ist, wird dann so gespeichert:
-
- Block 1 (ASCII_255) + die ersten 255 Byte Text
- Block 2 (ASCII_45) + die restlichen 45 Byte Text
- Der Rest des 2.Blocks bleibt leer.
- Block 3 (LängenByte ... der nächsten Nachricht ...
-
-
- Für jede Message existieren also unterschiedlich viele
- Blöcke.
-
- Hinweis: Das gelegentlich _IM_ Text vorkommende ASCII 141 »ì« dient
- als Soft-Return und hat sonst keine Bedeutung.
-
-
-
-
- MSGTOIDX.BBS
- ============
-
- Randomdatei mit Satzlänge 36 Byte.
- Für jede Message existiert ein Satz.
-
- Bedeutung: Lesemerker für die User. Ein Editor oder BBS ermittelt
- hiermit, welche ungelesenen Mails an den jeweiligen User
- noch vorhanden sind.
-
- Satzaufbau:
-
- ToIndex = Record
- WhoTo: String[35]
- End;
-
-
-
- Felder: Also: Byte 1 = Textlänge
- Byte 2 - 36 = Name des Message-Empfängers
-
-
- Wurde die Mail vom User gelesen, dann steht anschließend in
- Byte 2-36 nicht mehr der Username, sondern "* Received *"
-
-
- Beispiel: Empfänger heißt "Hans Huber" = 10 Zeichen
- (ASCII_10)Hans Huber
- nach dem Lesen:
- (ASCII_12)* Received *
-
-
-
-
- ZUSAMMENSPIEL
- ~~~~~~~~~~~~~
-
- Die fünf Dateien hängen nach folgendem Schema von einander ab:
-
-
- ┌---> Empfängername als Kopie in MSGTOIDX.BBS
- |
- ┌---> Header in MSGHDR.BBS
- |
- Message >--┼---> Text in MSGTXT.BBS
- |
- └---> BoardNr in MSGIDX.BBS
- |
- └---> Gesamtzahl und Anzahl/Board in MSGINFO.BBS
-
-
-
- Die Ordnungsfolge der Datensätze folgender Dateien entspricht einander:
-
- 1. Satz in MSGHDR.BBS -
- - gehört zu 1. Satz in MSGIDX.BBS -
- - gehört zu 1. Satz in MSGTOIDX.BBS
-
-
- (MSGTXT.BBS und MSGINFO.BBS sind logischerweise nicht so zuzuordnen.)
-
-
-
-
-
- WIE LESE ICH NUN EINE MESSAGE AUS DER BASE?
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
- Nehmen wir zB. Messagenummer 452
-
- a) Satz 452 aus MSGHDR.BBS lesen,
- BY:, TO:, RE:, etc extrahieren,
-
- b) Feld -StartRec- auslesen,
- Feld -NumRecs- auslesen
-
- c) In der MSGTXT ab dem Block (StartRec) lesen,
- undzwar (NumRecs) Blöcke lang.
-
-
- Und schon haben wir die Mail!
-
-
-
-
- MSGHDR.BBS MSGTXT.BBS
- ... ...
- -StartRec- -NumRecs- (ASCII_60)textetxtetxtet.
- ╚═══════════╪═══════(ab hier)═════>┌ (ASCII_255)Texttxtetxtetxtextte
- └────────(zB. 4)───────┼ (ASCII_255)textetxtetxtetxtetxt
- ├ (ASCII_255)textetxtetxtetxtetxt
- └ (ASCII_50)textetxtet.
- (ASCII_255)Textetxtetxtetxtetxt
- ...
-
-
-
- Zeilenumbrüche sind entweder als Hardreturn ASCII_13 (CR) oder als
- Softreturn ASCII_141 (ì) im Text enthalten:
-
- ( soll ASCII_13 darstellen)
-
- "≡Hallo, das ist eine erste Zeileìund das die zweiteund hier die dritte..."
- ^ ^ ^
- └─ Längenbyte └─ Zeilenumbrüche ─┘
-
-
-
-
-
-
- -------------------------------------------------------------------------------
- The little programers guide to the hudsonbase.
-
- * Origin: Munich, 15.09.92
-
- -Rainer-
- (2:246/54)